﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;


namespace BOL
{
    [Serializable]
   public class tipoCambioBL
    {
        public int Add(DateTime fecha,
                        int idMonedaBase,
                        int idMonedaCambio,
                        decimal Monto,
                        decimal montoCompra)
        {


            dbGestionDataContext _db =
                        new dbGestionDataContext(Parametros.strConnString);

            int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
            //--------------------
            bool acceso = new FormularioAcceso().VerificarAcceso(_db,
                idEmpleadoEmisor,
                12,
                 2);
            //-------------------------    
            TipoCambio tp= new TipoCambio();
            tp.Add(_db, 
                Monto,
                montoCompra, 
                idMonedaBase, idMonedaCambio, idEmpleadoEmisor, fecha);


            return tp.idInternal;
            

        }


        public void Update(int idInternal,
            DateTime fecha,
            int idMonedabase,
            int idMonedaCambio,
            decimal monto,
            decimal montoCompra)
    {

        dbGestionDataContext _db= new dbGestionDataContext(DbUtil.strConnString);
              int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
            //--------------------
            bool acceso = new FormularioAcceso().VerificarAcceso(_db,
                idEmpleadoEmisor,
                12,
                 3);
            //-------------------------

            TipoCambio tp = _db.TipoCambios.Single(p => p.idInternal == idInternal);
            tp.Update(_db, monto, montoCompra, idMonedabase, idMonedaCambio, idEmpleadoEmisor, fecha);


    }

        public void Delete(int idInternal)
        {
            dbGestionDataContext _db = new dbGestionDataContext(DbUtil.strConnString);

            int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
            //--------------------
            bool acceso = new FormularioAcceso().VerificarAcceso(_db,
                idEmpleadoEmisor,
                12,
                 4);
            //-------------------------

            TipoCambio tp = _db.TipoCambios.Single(p => p.idInternal == idInternal);
            _db.TipoCambios.DeleteOnSubmit(tp);
            _db.SubmitChanges();

        }



        int _count;
        public int Count(int startRowIndex, int maximumRows, string sortExpression)
        {
            return _count;
        }


        private IQueryable<TipoCambioListInfo> ApplySort(IQueryable<TipoCambioListInfo> q, string sortExpression)
        {
            switch (sortExpression)
            {
                case "montoCompra":
                    q = q.OrderBy(b => b.montoCompra);
                    break;
                case "montoCompra DESC":
                    q = q.OrderByDescending(b => b.montoCompra);
                    break;
                case "monto":
                    q = q.OrderBy(b => b.monto);
                    break;
                case "monto DESC":
                    q = q.OrderByDescending(b => b.monto);
                    break;
                case "desMonedaBase":
                    q = q.OrderBy(b => b.desMonedaBase);
                    break;
                case "desMonedaBase DESC":
                    q = q.OrderByDescending(b => b.desMonedaBase);
                    break;
                case "desMonedaCambio":
                    q = q.OrderBy(b => b.desMonedaCambio);
                    break;
                case "desMonedaCambio DESC":
                    q = q.OrderByDescending(b => b.desMonedaCambio);
                    break;
                case "fecha":
                    q = q.OrderBy(b => b.fecha);
                    break;
                case "fecha DESC":
                    q = q.OrderByDescending(b => b.fecha);
                    break;


                default:
                    q = q.OrderByDescending(b => b.fecha);
                    break;

            }
            return q;
        }



        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<TipoCambioListInfo> GetTipoCambioList(int startRowIndex, int maximumRows, string sortExpression)
        {


            var q2 = (from i in DbUtil.Db.TipoCambios
                      select new TipoCambioListInfo
                      {
                          fecha=i.fecha.Value,
                          fechaStr=i.fecha.Value.ToShortDateString(),
                          idInternal=i.idInternal,
                          desMonedaBase=i.Moneda.descripcion,
                          desMonedaCambio=i.Moneda1.descripcion,
                          monto=i.monto.Value  ,
                          montoCompra=i.montoCompra.Value,
                      });

             _count = q2.Count();
                q2 = ApplySort(q2, sortExpression);
                return q2.Skip(startRowIndex).Take(maximumRows);
             

            }
        }
      
   
}
